home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / c_lang / tabx.c < prev    next >
Internet Message Format  |  1990-02-23  |  4KB

  1. Date: Sat, 24 Feb 90 14:46:12 IST
  2. From: Baruch Nissenbaum <BARUCH%TAUNIVM.BITNET@CUNYVM.CUNY.EDU>
  3. To:   Keith Petersen <w8sdz@WSMR-SIMTEL20.ARMY.MIL>
  4. Re:   TABX.C - Filter that expands TABS to SPACES
  5.  
  6. To Keith Petersen,  In reply to Info-IBMPC Digest  Volume 90 : Issue  23
  7.  
  8. After sending TABX.C to the info-ibm list I realized I wasn't too happy with
  9. its limited ability to handle only fixed tab spacing, So I've added the
  10. ability to define variable tab stops.
  11.  
  12. In this newer version, tab stops are defined by a 'fancy' tab specification
  13. string, somewhat in a word processor style:
  14.  
  15. the string  --T---T   defines tab stops at col. 3 & 7.
  16.  
  17. This version should be more useful for general usage then the original
  18. tabx.c.  Also the header of main() was changed so it should be compiled
  19. with unix cc.
  20.  
  21. Thanks for keeping the name of tabx as it is. I have written filters to
  22. expand tabs several times but each time the program names where something
  23. like 'f3' and after a while they got lost amongst other filers of this sort.
  24. Now that the program has its own meaningful name I hope it is the last
  25. time I'm writing it.
  26.  
  27. Baruch Nissenbaum   -  Tel Aviv University  -  School of Engineering.
  28. E-mail: BITNET: BARUCH@TAUMIVM, BARUCH@TAUENG or BARUCH@TAUNIVM.TAU.AC.IL
  29.  
  30. -----------THE PROGRAM FOLLOWS:----------
  31.  
  32. /* TABX.C - tab expansion utility */
  33. /* Written by  Baruch Nissenbaum  - Tel-Aviv University, Israel 2/1990  (c) */
  34. /* E-MAIL: BARUCH@TAUNIVM.BITNET  (BARUCH@TAUNIVM.TAU.AC.IL)                */
  35. /* TEL: + 792 3 776892 (voice) */
  36. /* Comments, Suggestions and Ideas are welcomed */
  37.  
  38. /* This program should work for a file of any size, and any line length  */
  39. /* compiled and tested with TURBO-C, should work with any other compiler */
  40. /* see usage() for details of operation*/
  41.  
  42. #include <stdio.h>
  43. #include <ctype.h>
  44. #include <string.h>
  45.  
  46. main(argc,argv)
  47. int argc;
  48. char **argv;
  49. {
  50.    int c,col=0,tab=8,dlen=0;
  51.    char *d;
  52.  
  53.    if(argc>1)
  54.       if(strchr(d=argv[1],'T') != NULL || strchr(d,'t') )
  55.          dlen=strlen(d);
  56.       else
  57.          tab=atoi(argv[1]);
  58.    if(tab<1) {
  59.       usage();
  60.       exit(0);
  61.    }
  62.  
  63.    while((c=getchar()) != EOF)
  64.       if(c=='\t') {              /* expand tabs */
  65.          putchar(' ');  col++;   /* tab will generate at least one space */
  66.          for(; col<dlen && d[col]!='t' && d[col]!='T'; col++)
  67.             putchar(' ');        /* expansion of tabs (tab string) */
  68.          if( col>=dlen )
  69.             for(; col%tab; col++)
  70.                putchar(' ');     /* expansion of tabs (fixed spacing) */
  71.       }
  72.       else if(c=='\n' || c=='\r') {
  73.          putchar(c);
  74.          col=0;
  75.      }
  76.      else {                      /* any other character */
  77.         putchar(c);
  78.         col++;
  79.      }
  80. }
  81.  
  82. usage()
  83. {
  84.    fprintf(stderr,"      TABX  - tab expansion utility\n");
  85.    fprintf(stderr,"      This program expands tab characters to a list of spaces
  86.    fprintf(stderr,"usage:   TABX  [tab_spec]  < source_file  > dest_file\n");
  87.    fprintf(stderr,"      tab_spec can be an integer for setting fixed tab spacin
  88.    fprintf(stderr,"      tab_spec can also be a string as in:\n");
  89.    fprintf(stderr,"        TABX ---T---T-T---T  < in_file > out_file\n");
  90.    fprintf(stderr,"      In this case tab stops will match the position of the '
  91.    fprintf(stderr,"      in the above example - tabs will be set to 4 8 10 and 1
  92.    fprintf(stderr,"      There are no limits on file size or line length\n\n");
  93.    fprintf(stderr," Written by Baruch Nissenbaum,  Israel,  6 Feb 90 (c)\n\n");
  94.    fprintf(stderr," Not for sale,  FREE distribution only!!\n\n");
  95. }
  96.  
  97.